#ifndef TOKENS_HPP
#define TOKENS_HPP

struct Tkn{

	enum Token {
		InvalidToken = -1,
		Identifier,
		NumVal,
		IntVal,
		StringVal,
		Plus,
		Minus,
		Assign,
		Numeral,
		Function,
		Class,
		Var,
		If,
		Else,
		Do,
		While,
		Return,
		Colon,
		Semicolon,
		Comma,
		Dot,
		LParen,
		RParen,
		LCurlyBrace,
		RCurlyBrace,
		LBracket,
		RBracket,
		DotBracket,
		EOI,
		TokenCount
	};

	static char* name( Token t )
	{
		switch ( t )
		{
			case Identifier: return "identifier";
			case NumVal: return "numeric_value";
			case IntVal: return "integer_value";
			case StringVal: return "string_value";
			case Plus: return "'+'";
			case Minus: return "'-'";
			case Assign: return "'='";
			case Numeral: return "'#'";
			case Function: return "'function'";
			case Class: return "'class'";
			case Var: return "'var'";
			case If: return "'if'";
			case Else: return "'else'";
			case Do: return "'do'";
			case While: return "'while'";
			case Return: return "'return'";
			case Colon: return "':'";
			case Semicolon: return "';'";
			case Comma: return "','";
			case Dot: return "'.'";
			case LParen: return "'('";
			case RParen: return "')'";
			case LCurlyBrace: return "'{'";
			case RCurlyBrace: return "'}'";
			case LBracket: return "'['";
			case RBracket: return "']'";
			case DotBracket: return "'.['";
			case EOI: return "<<EOF>>";
			default: return "unnamed";
		}
	}

};

#endif // TOKENS_HPP
